/*
 * PhraseSerializer.h
 *
 *  Created on: Nov 21, 2012
 *      Author: m
 */

#ifndef PHRASESERIALIZER_H_
#define PHRASESERIALIZER_H_

#include "Serializer.h"
#include "VariableStringSerializer.h"
#include "../file_system/Phrase.h"

namespace physical
{

/**
 * Serializador de Phrase
 */
class PhraseSerializer : public Serializer<Phrase>
{
public:

    /**
     * Constructor por Defecto
     */
    PhraseSerializer();

    /**
     * Destructor
     */
    virtual ~PhraseSerializer();

    /**
     * Serializa una Phrase
     *
     * @param element Phrase a serializar
     * @param block Array de bytes en donde se serializa el elemento
     * @return Cantidad de bytes escritos en el block
     */
    size_t serialize( const Phrase& element, byteStream block );

    /**
     * Deserializa un Phrase
     *
     * @param block Array de bytes donde está serializado el elemento
     * @param element Referencia al elemento deserializado
     * @return Cantidad de bytes utilizados de block para deserializar
     */
    size_t deserialize( const byteStream block, Phrase& element );

    /**
     * Devuelve la cantidad de bytes que ocupa el elemento al ser serializado
     *
     * @param element Elemento a probar
     * @return Cantidad de bytes que ocuparía el elemento serializado
     */
    size_t getSize( const Phrase& element );

private :
    std::unique_ptr< Serializer<std::string> > m_stringSerializer;
};

} /* namespace physical */
#endif /* PHRASESERIALIZER_H_ */
